// 解释回调地狱，此文件需要在node.js中运行

// 要求，定义3秒后调用，读取a.txt文件内容，然后写入到b.txt文件

//const fs = require("fs");
const fs = require("fs/promises");

console.log("start....");
// 下面这种多次回调函数嵌套就是回调地狱，特点是减少了代码的可阅读性。
// setTimeout(function(){
//     fs.readFile("./a.txt", function(err,data){
//         if(err) throw err;
//         fs.writeFile("./b.txt",data, function(err){
//             if(err) throw err;
//             console.log("写入成功！");
//         })
//     });
// },3000);

// 将上面的三层回调地狱代码，使用promise改成非回调地狱调用

// 自定义函数，实现上面的要求，使用Promise封装(里面计时2秒后调用)
function myPromise(path){
    return new Promise((resolve, reject)=>{
        // 定义两秒后调用
        setTimeout(function(){
            resolve(path);
        }, 2000);
    });
}
// 使用Promise对象
myPromise("./a.txt")
.then(value => {
    return fs.readFile(value);
})
.then(value => {
    return  fs.writeFile("./b.txt",value);
}, reason => {
    console.log("文件读取失败！",reason);
})
.then(value=>{
    console.log("文件写入成功！");
},reason => {
    console.log("文件写入失败！",reason);
});

console.log("end....");